import { request } from '@/utils/service'

/**
 * 获取所有学生（分页查询）
 * 接口描述: 分页获取学生列表，支持搜索和班级过滤
 * 接口可选项:
 * page-页码(默认1)
 * page_size-每页大小(默认10)
 * search-搜索关键词(学号或姓名)
 * class_id-班级ID过滤
 * @param {Object} params 查询参数
 * @returns Promise
 */
export function getStudentsApi(params) {
  return request({
    url: "students",
    method: "get",
    params
  })
}

/**
 * 创建学生
 * 接口描述: 创建新的学生账户
 * 接口必填项:
 * sno-学号
 * name-姓名
 * password-密码
 * classId-班级ID
 * @param {Object} data 学生数据
 * @returns Promise
 */
export function createStudentApi(data) {
  return request({
    url: "students",
    method: "post",
    data
  })
}

/**
 * 更新学生信息
 * 接口描述: 更新学生基本信息
 * 接口必填项:
 * id-学生ID
 * sno-学号
 * name-姓名
 * password-密码
 * classId-班级ID
 * @param {number} id 学生ID
 * @param {Object} data 学生数据
 * @returns Promise
 */
export function updateStudentApi(id, data) {
  return request({
    url: `students/${id}`,
    method: "put",
    data
  })
}

/**
 * 删除学生
 * 接口描述: 根据ID删除学生，会级联删除相关成绩记录
 * 接口必填项:
 * id-学生ID
 * @param {number} id 学生ID
 * @returns Promise
 */
export function deleteStudentApi(id) {
  return request({
    url: `students/${id}`,
    method: "delete"
  })
}

/**
 * 获取学生详情
 * 接口描述: 根据ID获取学生详细信息
 * 接口必填项:
 * id-学生ID
 * @param {number} id 学生ID
 * @returns Promise
 */
export function getStudentDetailApi(id) {
  return request({
    url: `students/${id}`,
    method: "get"
  })
}

/**
 * 获取所有学生（已废弃，请使用getStudentsApi）
 * 接口描述: 获取所有学生列表
 * @returns Promise
 * @deprecated 请使用getStudentsApi代替
 */
export function getAllStudentsApi() {
  return getStudentsApi()
}

/**
 * 分页查询学生（已废弃，请使用getStudentsApi）
 * 接口描述: 分页获取学生列表
 * @param {Object} params 分页参数
 * @returns Promise
 * @deprecated 请使用getStudentsApi代替
 */
export function getStudentPageApi(params) {
  return getStudentsApi(params)
}

/**
 * 根据班级ID查询学生
 * 接口描述: 获取指定班级的所有学生
 * 接口必填项:
 * classId-班级ID
 * @param {number} classId 班级ID
 * @returns Promise
 */
export function getStudentsByClassApi(classId) {
  return getStudentsApi({ class_id: classId })
}

/**
 * 根据姓名搜索学生
 * 接口描述: 根据姓名关键字模糊查询学生
 * 接口必填项:
 * name-姓名关键字
 * @param {string} name 姓名关键字
 * @returns Promise
 */
export function searchStudentsByNameApi(name) {
  return getStudentsApi({ search: name })
}

/**
 * 根据学号搜索学生
 * 接口描述: 根据学号关键字模糊查询学生
 * 接口必填项:
 * sno-学号关键字
 * @param {string} sno 学号关键字
 * @returns Promise
 */
export function searchStudentsBySnoApi(sno) {
  return getStudentsApi({ search: sno })
}

/**
 * 修改学生密码
 * 接口描述: 修改学生密码
 * 接口必填项:
 * id-学生ID
 * oldPassword-旧密码
 * newPassword-新密码
 * @param {Object} data 密码修改数据
 * @returns Promise
 */
export function updateStudentPasswordApi(data) {
  return request({
    url: "student/change-password",
    method: "post",
    data
  })
}
